<?php
class User_Role_Rule extends Model_Database
{
	private $_tb_name	= '';
	const _DB_ACL		= 'acl';

	public function __construct()
	{
		$this->_tb_name	= 'acl_rules';
		parent:: __construct();
	}

	/**
	 *	获得所有规则，即角色资源对应关系
	 *
	 *	return array
	 */
	public static function get_all_rules()
	{
	
		$rs	= DB::select('*')
				->from('acl_rules')
				->execute(self::_DB_ACL);

		return $rs->as_array();
	}

	/**
	 *	通过角色ID 获得该角色拥有的资源
	 *
	 *	param int $role_id
	 *
	 *	return array 
	 */
	public static function get_role_rules($role_id)
	{
	
		$role_id	= intval($role_id);

		if($role_id <= 0)
			return false;

		$data		= DB::select('*')
						->from('acl_rules')
						->where('role_id','=', $role_id)
						->execute(self::_DB_ACL);

		return $data->as_array();
	}

	/**
	 *	判断某个规则是否存在
	 *
	 *	param int $resource_id, int $role_id
	 *
	 *	return boolean 
	 *
	 */
	public static function has_rule($resource_id, $role_id)
	{
	
		$role_id	= intval($role_id);
		$resource_id= intval($resource_id);

		if($role_id <= 0 || $resource_id <= 0)
			return false;

		$data		= DB::select('*')
						->from('acl_rules')
						->where('role_id','=', $role_id)
						->where('resource_id', '=', $resource_id)
						->execute(self::_DB_ACL);

		$rs			= $data->as_array();
		return empty($rs)	? false : true;
	}

	/**
	 *	插入规则
	 *
	 *	param string $type enum('allow','deny'), int $role_id  ,$resource_id array $method, string $assert (断言类名称)
	 *
	 *	return boolean 
	 *
	 */
	public static function insert_rule($type = 'allow', $role_id,$resource_id,$method = '', $assert = '')
	{
		$role_id		= intval($role_id);
		$resource_id	= intval($resource_id);
	
		if($role_id <= 0 || $resource_id <= 0)
			return false;

		$rs	= DB::insert('acl_rules')
				->columns(array('type', 'role_id', 'resource_id', 'method', 'assert'))
				->values(array($type, $role_id, $resource_id, $method, $assert))
				->execute(self::_DB_ACL);

		return empty($rs) ? false : true;
	}

	/**
	 *	根据ID删除规则
	 *	
	 *	param int $id
	 *
	 *	return boolean
	 *
	 */
	public static function del_rule($id){

		$id = intval($id);

		if($id <= 0)
			return false;
		
		if($id){
			
			$rs	= DB::delete('acl_rules')
					->where('id', '=', $id)
					->execute(self::_DB_ACL);
			
			return empty($rs) ? false : true;
		}
	}
}

?>
